package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.constant.MessageConstant;
import com.itheima.dao.CheckGroupDao;
import com.itheima.entity.PageResult;
import com.itheima.pojo.CheckGroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.util.Arrays;
import java.util.List;

/**
 * @Author: Autism
 * @Date: 2019/7/27 9:43
 * @Description:
 */
@Service(interfaceClass = CheckGroupService.class)
@Transactional
public class CheckGroupServiceImpl implements CheckGroupService {

    @Autowired
    CheckGroupDao checkGroupDao;

    /**
     * 新增检查组
     */
    @Override
    public void add(CheckGroup checkGroup, Integer[] checkitemids) {
        //  新增基本信息
        checkGroupDao.add(checkGroup);
        //	获取新增检查组ID
        Integer id = checkGroup.getId();
        //	新增关联信息
        addNewRelations(checkitemids, id);


    }


    /**
     * 分页查询
     */
    @Override
    public PageResult findPage(Integer currentPage, Integer pageSize, String queryString) {
        PageHelper.startPage(currentPage, pageSize);
        Page<CheckGroup> checkGroups = checkGroupDao.findPage(queryString);

        return new PageResult(checkGroups.getTotal(), checkGroups.getResult());
    }

    /**
     * 查询检查组基本信息
     */
    @Override
    public CheckGroup findById(Integer id) {
        return checkGroupDao.findById(id);
    }

    /**
     * 查询关联信息
     */
    @Override
    public Integer[] findRelations(Integer id) {
        return checkGroupDao.findRelations(id);
    }

    /**
     * 编辑检查组
     */
    @Override
    public void edit(CheckGroup checkGroup, Integer[] checkitemIds) {
        //	更新基本信息
        checkGroupDao.edit(checkGroup);
        Integer id = checkGroup.getId();
        //	更新关联关系（先删除旧的关联关系，再新增新的关联关系）
        checkGroupDao.deleteRelations(id);
        addNewRelations(checkitemIds, id);

    }

    /**
     * 查询所有的检查组
     *
     * @return
     */
    @Override
    public List<CheckGroup> findAll() {

        return checkGroupDao.findAll();
    }

    /**
     * 删除  待实现 //todo
     * @param id
     */
    @Override
    public void delete(Integer id) {

        //删除一条检查组记录
        checkGroupDao.delete(id);
        //删除检查组和检查项的关联关系
        //根据检查组id删除中间表的检查组合检查项对应的关联关系
        checkGroupDao.deleteRelations(id);


    }

    private void addNewRelations(Integer[] checkitemids, Integer id) {
        List<Integer> checkitemidList = Arrays.asList(checkitemids);
        if (!CollectionUtils.isEmpty(checkitemidList)) {
            checkitemidList.forEach(checkitemid -> {
                checkGroupDao.addRelationsBetweenCheckGroupAndCheckItem(id, checkitemid);
            });
        }
    }
}
